Recognize potential impl<const N: usize> to impl<N> mistake#151077
Merged
rust-bors[bot] merged 1 commit intorust-lang:mainfrom Jan 14, 2026
Merged
Recognize potential impl<const N: usize> to impl<N> mistake#151077rust-bors[bot] merged 1 commit intorust-lang:mainfrom
impl<const N: usize> to impl<N> mistake#151077rust-bors[bot] merged 1 commit intorust-lang:mainfrom
Conversation
Collaborator
|
rustbot has assigned @petrochenkov. Use |
Contributor
Author
|
The logic could be made more complex to ensure that the type param isn't being used anywhere in the TypeNS, which would tell us that the suggestion would be less likely to be correct. |
fmease
reviewed
Jan 13, 2026
fmease
approved these changes
Jan 13, 2026
| }) else { | ||
| return; | ||
| }; | ||
| err.subdiagnostic(errors::UnexpectedResChangeImplTyParamToConstParamSugg { |
Member
There was a problem hiding this comment.
…Impl…
Doesn't this also trigger outside of impls? E.g., on fn f<N>(_: [(); N]) {}?
Maybe rename the preexisting diag struct (the one for N: Type→const N: Type) to …BoundedTyParam… & remove Impl from this one? Idk, sth. like that
Member
|
@bors rollup Thanks! r=me with nit addressed in one way or another |
When encountering code like `impl<N> Bar<N> for [u8; N]`, suggest `impl<const N: Type> Bar<N> for [u8; N]` as a possibility.
```
error[E0423]: expected value, found type parameter `T`
--> $DIR/issue-69654.rs:5:25
|
LL | impl<T> Bar<T> for [u8; T] {}
| - ^ not a value
| |
| found this type parameter
|
help: you might have meant to write a const parameter here
|
LL | impl<const T: /* Type */> Bar<T> for [u8; T] {}
| +++++ ++++++++++++
```
Contributor
Author
|
@bors r=fmease |
Contributor
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Jan 14, 2026
Recognize potential `impl<const N: usize>` to `impl<N>` mistake
When encountering code like `impl<N> Bar<N> for [u8; N]`, suggest `impl<const N: Type> Bar<N> for [u8; N]` as a possibility.
```
error[E0423]: expected value, found type parameter `T`
--> $DIR/issue-69654.rs:5:25
|
LL | impl<T> Bar<T> for [u8; T] {}
| - ^ not a value
| |
| found this type parameter
|
help: you might have meant to write a const parameter here
|
LL | impl<const T: Type> Bar<T> for [u8; T] {}
| +++++ ++++++
```
Addresses "case 3" from rust-lang#84327.
rust-bors bot
pushed a commit
that referenced
this pull request
Jan 14, 2026
…uwer Rollup of 12 pull requests Successful merges: - #149408 (refactor: remove Ord bound from BinaryHeap::new etc) - #150406 (Change some `matches!(.., .. if ..)` with let-chains) - #150723 (std: move `errno` and related functions into `sys::io`) - #150877 (resolve: Refactor away the side table `decl_parent_modules`) - #150902 (Update to_uppercase docs to avoid ß->SS example) - #150962 (Remove `FeedConstTy` and provide ty when lowering const arg) - #151034 (std: Change UEFI env vars to volatile storage) - #151036 (Better handle when trying to iterate on a `Range` of a type that isn't `Step`) - #151067 (Avoid should-fail in two ui tests and a codegen-llvm test) - #151072 (also handle ENOTTY ioctl errors when checking pidfd -> pid support) - #151077 (Recognize potential `impl<const N: usize>` to `impl<N>` mistake) - #151096 (Remove `Deref`/`DerefMut` impl for `Providers`.) Failed merges: - #150939 (resolve: Relax some asserts in glob overwriting and add tests) r? @ghost
rust-bors bot
pushed a commit
that referenced
this pull request
Jan 14, 2026
…uwer Rollup of 11 pull requests Successful merges: - #149408 (refactor: remove Ord bound from BinaryHeap::new etc) - #150406 (Change some `matches!(.., .. if ..)` with let-chains) - #150723 (std: move `errno` and related functions into `sys::io`) - #150877 (resolve: Refactor away the side table `decl_parent_modules`) - #150902 (Update to_uppercase docs to avoid ß->SS example) - #151034 (std: Change UEFI env vars to volatile storage) - #151036 (Better handle when trying to iterate on a `Range` of a type that isn't `Step`) - #151067 (Avoid should-fail in two ui tests and a codegen-llvm test) - #151072 (also handle ENOTTY ioctl errors when checking pidfd -> pid support) - #151077 (Recognize potential `impl<const N: usize>` to `impl<N>` mistake) - #151096 (Remove `Deref`/`DerefMut` impl for `Providers`.) Failed merges: - #150939 (resolve: Relax some asserts in glob overwriting and add tests) r? @ghost
rust-timer
added a commit
that referenced
this pull request
Jan 14, 2026
Rollup merge of #151077 - issue-84327, r=fmease Recognize potential `impl<const N: usize>` to `impl<N>` mistake When encountering code like `impl<N> Bar<N> for [u8; N]`, suggest `impl<const N: Type> Bar<N> for [u8; N]` as a possibility. ``` error[E0423]: expected value, found type parameter `T` --> $DIR/issue-69654.rs:5:25 | LL | impl<T> Bar<T> for [u8; T] {} | - ^ not a value | | | found this type parameter | help: you might have meant to write a const parameter here | LL | impl<const T: Type> Bar<T> for [u8; T] {} | +++++ ++++++ ``` Addresses "case 3" from #84327.
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Jan 14, 2026
Recover parse gracefully from `<const N>` When a const param doesn't have a `: Type`, recover the parser state and provide a structured suggestion. This not only provides guidance on what was missing, but it also makes subsuequent errors to be emitted that would otherwise be silenced. ``` error: expected `:`, found `>` --> $DIR/incorrect-const-param.rs:26:16 | LL | impl<T, const N> From<[T; N]> for VecWrapper<T> | ^ expected `:` | help: you might have meant to write the type of the const parameter here | LL | impl<T, const N: /* Type */> From<[T; N]> for VecWrapper<T> | ++++++++++++ ``` r? @fmease Follow up to rust-lang#151077. Fix rust-lang#84327.
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Jan 14, 2026
Recover parse gracefully from `<const N>` When a const param doesn't have a `: Type`, recover the parser state and provide a structured suggestion. This not only provides guidance on what was missing, but it also makes subsuequent errors to be emitted that would otherwise be silenced. ``` error: expected `:`, found `>` --> $DIR/incorrect-const-param.rs:26:16 | LL | impl<T, const N> From<[T; N]> for VecWrapper<T> | ^ expected `:` | help: you might have meant to write the type of the const parameter here | LL | impl<T, const N: /* Type */> From<[T; N]> for VecWrapper<T> | ++++++++++++ ``` r? @fmease Follow up to rust-lang#151077. Fix rust-lang#84327.
rust-timer
added a commit
that referenced
this pull request
Jan 15, 2026
Rollup merge of #151099 - issue-84327-2, r=fmease Recover parse gracefully from `<const N>` When a const param doesn't have a `: Type`, recover the parser state and provide a structured suggestion. This not only provides guidance on what was missing, but it also makes subsuequent errors to be emitted that would otherwise be silenced. ``` error: expected `:`, found `>` --> $DIR/incorrect-const-param.rs:26:16 | LL | impl<T, const N> From<[T; N]> for VecWrapper<T> | ^ expected `:` | help: you might have meant to write the type of the const parameter here | LL | impl<T, const N: /* Type */> From<[T; N]> for VecWrapper<T> | ++++++++++++ ``` r? @fmease Follow up to #151077. Fix #84327.
github-actions bot
pushed a commit
to rust-lang/miri
that referenced
this pull request
Jan 15, 2026
…uwer Rollup of 11 pull requests Successful merges: - rust-lang/rust#149408 (refactor: remove Ord bound from BinaryHeap::new etc) - rust-lang/rust#150406 (Change some `matches!(.., .. if ..)` with let-chains) - rust-lang/rust#150723 (std: move `errno` and related functions into `sys::io`) - rust-lang/rust#150877 (resolve: Refactor away the side table `decl_parent_modules`) - rust-lang/rust#150902 (Update to_uppercase docs to avoid ß->SS example) - rust-lang/rust#151034 (std: Change UEFI env vars to volatile storage) - rust-lang/rust#151036 (Better handle when trying to iterate on a `Range` of a type that isn't `Step`) - rust-lang/rust#151067 (Avoid should-fail in two ui tests and a codegen-llvm test) - rust-lang/rust#151072 (also handle ENOTTY ioctl errors when checking pidfd -> pid support) - rust-lang/rust#151077 (Recognize potential `impl<const N: usize>` to `impl<N>` mistake) - rust-lang/rust#151096 (Remove `Deref`/`DerefMut` impl for `Providers`.) Failed merges: - rust-lang/rust#150939 (resolve: Relax some asserts in glob overwriting and add tests) r? @ghost
github-actions bot
pushed a commit
to rust-lang/miri
that referenced
this pull request
Jan 15, 2026
Recover parse gracefully from `<const N>` When a const param doesn't have a `: Type`, recover the parser state and provide a structured suggestion. This not only provides guidance on what was missing, but it also makes subsuequent errors to be emitted that would otherwise be silenced. ``` error: expected `:`, found `>` --> $DIR/incorrect-const-param.rs:26:16 | LL | impl<T, const N> From<[T; N]> for VecWrapper<T> | ^ expected `:` | help: you might have meant to write the type of the const parameter here | LL | impl<T, const N: /* Type */> From<[T; N]> for VecWrapper<T> | ++++++++++++ ``` r? @fmease Follow up to rust-lang/rust#151077. Fix rust-lang/rust#84327.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When encountering code like
impl<N> Bar<N> for [u8; N], suggestimpl<const N: Type> Bar<N> for [u8; N]as a possibility.Addresses "case 3" from #84327.